  // index.js

  // 格式化时间
  function formatTime(time) {
    var minute = Math.floor(time / 60) % 60;
    var second = Math.floor(time) % 60
    return (minute < 10 ? '0' + minute : minute) + ':' + (second < 10 ? '0' + second : second)
  }

  Page({
    data: {
      item: 0, // 当前页面显示的 item 索引
      tab: 0, // 当前 tab 索引
      // 播放列表数组playlist
      playlist: [{
        id: 1,
        title: '祝你生日快乐',
        singer: '小丽',
        src: 'http://127.0.0.1:3000/1.mp3',
        coverImgUrl: '/images/cover.jpg'
      }, {
        id: 2,
        title: '劳动最光荣',
        singer: '小朋',
        src: 'http://127.0.0.1:3000/2.mp3',
        coverImgUrl: '/images/cover.jpg'
      }, {
        id: 3,
        title: '龙的传人',
        singer: '小华',
        src: 'http://127.0.0.1:3000/3.mp3',
        coverImgUrl: '/images/cover.jpg'
      }, {
        id: 4,
        title: '小星星',
        singer: '小红',
        src: 'http://127.0.0.1:3000/4.mp3',
        coverImgUrl: '/images/cover.jpg'
      }],
      state: 'running',
      playIndex: 0, // 当前播放的曲目索引
      play: {
        currentTime: '00:00',
        duration: '00:00',
        percent: 0,
        title: '',
        singer: '',
        coverImgUrl: '/images/cover.jpg',
      }
    },
    // 在页面初次渲染时，自动选择播放列表中的第1个曲目
    audioBam: null,
    sliderChangeLock: false,
    onReady: function () {
      this.audioBam = wx.getBackgroundAudioManager() // 获取音频管理器
      // 默认选择第1曲
      this.setMusic(0)
      // 播放失败检测
      // this.audioBam.onError(() => {
      //   console.log('播放失败：' + this.audioBam.src)
      // })
      // 播放完成自动换下一曲，监听音频自然播放结束的事件
      this.audioBam.onEnded(() => {
        this.next()
      })
      // 监听音频播放进度更新事件，获取音乐状态信息
      var updateTime = 0 // 上次更新的时间
      this.audioBam.onTimeUpdate(() => {
        var currentTime = parseInt(this.audioBam.currentTime)// 获取当前播放时间
        if (!this.sliderChangeLock && currentTime !== updateTime) {  // 将更新频率限制在1秒1次
          updateTime = currentTime
          //更新页面的播放进度、当前播放时间和音频的总时长。
          this.setData({
            'play.duration': formatTime(this.audioBam.duration || 0),
            'play.currentTime': formatTime(currentTime),
            'play.percent': currentTime / this.audioBam.duration * 100
          })
        }
      })
    },
    //指定时间
    sliderChange: function (e) {
      var second = e.detail.value * this.audioBam.duration / 100
      this.audioBam.seek(second)//用户停止拖动时调用,跳转到指定的播放时间。
      setTimeout(() => {
        this.sliderChangeLock = false
      }, 1000)
    },
    //实时更新当前播放时间显示
    sliderChanging: function (e) {
      var second = e.detail.value * this.audioBam.duration / 100
      this.sliderChangeLock = true
      this.setData({
        'play.currentTime': formatTime(second),// 更新当前时间显示
      })
    },
    // 设置当前播放的曲目
    setMusic: function (index) {
      var music = this.data.playlist[index]
      this.audioBam.src = music.src
      this.audioBam.title = music.title
      this.setData({
        playIndex: index,
        'play.title': music.title,
        'play.singer': music.singer,
        'play.coverImgUrl': music.coverImgUrl,
        'play.currentTime': '00:00',
        'play.duration': '00:00',
        'play.percent': 0,
        state: 'running'
      })
    },
    //控制显示页面的内容
    changeItem: function (e) {
      this.setData({
        item: e.target.dataset.item
      })
    },
    changeTab: function (e) {
      this.setData({
        tab: e.detail.current
      })
    },
    //播放当前选中的音频。
    play: function () {
      this.audioBam.play()
      this.setData({
        state: 'running'
      })
    },
    //暂停当前播放的音频。
    pause: function () {
      this.audioBam.pause()
      this.setData({
        state: 'paused'
      })
    },
    // 点击播放下一曲的操作
    next: function () {
      var index = this.data.playIndex >= this.data.playlist.length - 1 ? 0 : this.data.playIndex + 1
      this.setMusic(index)
    },
    // 点击播放列表中的某一项时进行该曲目的播放
    change: function (e) {
      this.setMusic(e.currentTarget.dataset.index)
    }
  })

